package com.kexilo.core.common.annotation;

import java.lang.annotation.*;

/**
 * 限流注解
 * 
 * @author Kexilo
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
    
    /**
     * 限流key前缀
     */
    String key() default "rate_limit:";
    
    /**
     * 限流时间，单位秒
     */
    int time() default 60;
    
    /**
     * 限流次数
     */
    int count() default 100;
    
    /**
     * 限流类型
     */
    LimitType limitType() default LimitType.DEFAULT;
    
    /**
     * 提示消息
     */
    String message() default "访问过于频繁，请稍候再试";
    
    /**
     * 限流类型
     */
    enum LimitType {
        /**
         * 默认策略全局限流
         */
        DEFAULT,
        
        /**
         * 根据请求者IP进行限流
         */
        IP,
        
        /**
         * 根据用户进行限流
         */
        USER
    }
}
